Java Technologies Method Reference এর মাধ্যমে Custom Mapping করা গাইড ও নোট

281

MapStruct একটি শক্তিশালী টুল যা অটোমেটিক্যালি JavaBeans বা ডোমেইন অবজেক্টগুলির মধ্যে ম্যাপিং করে। কখনও কখনও, আপনি একটি custom mapping প্রক্রিয়া তৈরি করতে চাইবেন যেখানে MapStruct এর স্বয়ংক্রিয় ম্যাপিং লজিক যথেষ্ট নয়। এর জন্য আপনি Method Reference ব্যবহার করে Custom Mapping তৈরি করতে পারেন।

Method Reference ব্যবহার করার মাধ্যমে আপনি MapStruct এর ইনবিল্ট ম্যাপিং লজিকের সাথে কাস্টম লজিক যোগ করতে পারেন। এতে আপনি আপনার মডেল ম্যাপিং-এর জন্য কাস্টম কনভার্সন লজিক তৈরি করতে সক্ষম হবেন।

এটি সাধারণত ব্যবহার হয় যখন আপনাকে ডেটার ফরম্যাট বা ধরন কাস্টম কনভার্ট করতে হয়, যেমন একটি String থেকে Date বা Enum থেকে String এর কনভার্সন।


১. Method Reference এর মাধ্যমে Custom Mapping কী?

Method Reference হল Java 8 এর একটি বৈশিষ্ট্য যা কোন একটি মেথডকে রেফারেন্স করার মাধ্যমে সরাসরি ব্যবহার করার সুযোগ দেয়। MapStruct তে, আমরা এই বৈশিষ্ট্যটি ব্যবহার করতে পারি কাস্টম ম্যাপিং যুক্ত করার জন্য। বিশেষ করে যদি কোন কাস্টম কনভার্সন লজিক বা ডেটা প্রসেসিং করতে হয়, তখন Method Reference ব্যবহার করে তা সহজে যুক্ত করা যায়।

২. Method Reference ব্যবহার করে Custom Mapping তৈরি করা

ধরা যাক, আপনি একটি Employee ক্লাস থেকে EmployeeDTO ক্লাসে ডেটা ম্যাপ করতে চান, তবে কিছু ফিল্ডের জন্য আপনাকে কাস্টম কনভার্সন লজিক প্রয়োগ করতে হবে। যেমন, name এর আগে একটি স্যালুট (prefix) যোগ করা।

২.১ Employee এবং EmployeeDTO ক্লাস

Employee.java (Domain Object):

public class Employee {
    private String name;
    private String department;

    // Getters and Setters
}

EmployeeDTO.java (DTO Object):

public class EmployeeDTO {
    private String fullName;
    private String department;

    // Getters and Setters
}

২.২ Custom Mapping Method

এখন, আমরা একটি method reference ব্যবহার করে Employee থেকে EmployeeDTO তে ম্যাপিং করতে পারি, যেখানে name ফিল্ডে স্যালুট যোগ করা হবে।

EmployeeMapper.java (Mapper Interface):

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface EmployeeMapper {
    EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);

    // Custom Mapping Method
    @Mapping(source = "name", target = "fullName", qualifiedByName = "addSalutation")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);
    
    // Custom Method to add salutation to the name
    default String addSalutation(String name) {
        return "Mr./Ms. " + name;
    }
}

এখানে:

  • addSalutation একটি কাস্টম মেথড যা Employee এর name ফিল্ডে "Mr./Ms." স্যালুট যোগ করে।
  • qualifiedByName ব্যবহার করা হয়েছে, যাতে MapStruct জানে কোন মেথড ব্যবহার করতে হবে।

২.৩ Usage Example

এখন, EmployeeMapper ব্যবহার করে Employee অবজেক্টকে EmployeeDTO তে ম্যাপ করতে হবে:

Main.java (Usage):

public class Main {
    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setDepartment("Engineering");

        // Perform Mapping
        EmployeeDTO employeeDTO = EmployeeMapper.INSTANCE.employeeToEmployeeDTO(employee);
        System.out.println("Full Name: " + employeeDTO.getFullName());
        System.out.println("Department: " + employeeDTO.getDepartment());
    }
}

এখানে, employeeToEmployeeDTO মেথডটি addSalutation কাস্টম মেথড ব্যবহার করে Employee এর name ফিল্ডের সাথে স্যালুট যোগ করবে এবং EmployeeDTO তে সেটি ম্যাপ করবে।

আউটপুট:

Full Name: Mr./Ms. John Doe
Department: Engineering

৩. Method Reference ব্যবহার করে Complex Data Type Mapping

MapStruct এ Method Reference ব্যবহার করার আরেকটি উদাহরণ হলো যখন আপনি complex data types যেমন String থেকে Date বা Enum থেকে String কনভার্ট করতে চান। MapStruct আপনাকে এই কাস্টম কনভার্টারের জন্য qualifiedByName ব্যবহার করতে দেয়।

৩.১ String to Date Mapping Example

ধরা যাক, আপনাকে String ফরম্যাটে থাকা একটি তারিখকে Date অবজেক্টে কনভার্ট করতে হবে:

import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomMapper {

    // Custom method to convert String to Date
    public static Date stringToDate(String dateStr) throws Exception {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.parse(dateStr);
    }
}

এখন, MapStruct এ এই কাস্টম কনভার্টার ব্যবহার করার জন্য:

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface EmployeeMapper {

    EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);

    @Mapping(source = "dateOfBirth", target = "dob", qualifiedByName = "stringToDate")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);
    
    // Custom method to convert String to Date
    default Date stringToDate(String dateStr) throws Exception {
        return CustomMapper.stringToDate(dateStr);
    }
}

এখানে, stringToDate কাস্টম মেথডটি Employee এর dateOfBirth ফিল্ডকে Date ফরম্যাটে কনভার্ট করে।


৪. MapStruct এ Method Reference এর সুবিধা

  1. Clean and Reusable Code: MapStruct এর মাধ্যমে Method Reference ব্যবহার করলে কাস্টম কনভার্টারগুলো পরিষ্কার এবং পুনরায় ব্যবহারযোগ্য হয়।
  2. Compile-time Safety: Method Reference ব্যবহার করলে আপনি compile-time এ টাইপ চেকিং করতে পারবেন, যা রানটাইমের ত্রুটির সম্ভাবনা কমায়।
  3. Flexibility: Complex কনভার্সন বা কাস্টম লজিক প্রয়োগ করতে Method Reference খুবই কার্যকরী, যা MapStruct এর ডিফল্ট মেপিং লজিকের বাইরে যেতে সাহায্য করে।

সারাংশ

Method Reference ব্যবহার করে MapStruct এ কাস্টম ম্যাপিং এবং কনভার্সন করার মাধ্যমে আপনি আপনার ডেটার মান এবং কাস্টম লজিক প্রক্রিয়া সম্পাদন করতে পারেন। এটি বিশেষভাবে প্রয়োজনীয় যখন আপনাকে String থেকে Date, Enum থেকে String, বা complex objects এর মধ্যে কনভার্ট করতে হয়। Method Reference এর মাধ্যমে আপনি সহজে এবং কার্যকরীভাবে কাস্টম ম্যাপিংয়ের সুবিধা পেতে পারেন।


Content added By
Promotion

Are you sure to start over?

Loading...